package com.szlanyou.thirdsdk.retrofit.file.upload;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import okhttp3.MultipartBody;
import okhttp3.ResponseBody;
import retrofit2.http.FieldMap;
import retrofit2.http.Header;
import retrofit2.http.HeaderMap;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.Path;

/**
 * @author 陈章
 * create at 2020/11/23 9:56
 * desc: 文件上传
 * 目的是想写一个通用的上传的方法，无奈不同的接口返回形式不一样，但是RxJava的Observable指定的泛型必须是具体值。
 * 所以只能把此类中的方法复制过去修改Observable的泛型为具体类型。
 */
public interface UploadFileService {
    String HEADER_KEY_UNIQUE_REQUEST_ID = "uniqueUploadFileRequestId";

    /**
     * 图片上传
     *
     * @param uploadActionUrl           上传的url
     * @param parts                     上传参数和文件的封装
     * @param uniqueUploadFileRequestId 标识某次请求的唯一id，用于在拦截器找到对应的callback进行回调。
//     * @param headerMap                 请求头
     * @return
     * @Path注解要encoded = true，否则path为多极url有可能会乱码。
     */
    @Multipart
    @POST("{uploadActionUrl}")
    Observable<ResponseBody> uploadFile(@Path(value = "uploadActionUrl", encoded = true) String uploadActionUrl,
                                        @Part List<MultipartBody.Part> parts,
                                        @Header(UploadFileService.HEADER_KEY_UNIQUE_REQUEST_ID) String uniqueUploadFileRequestId/*,
                                        @HeaderMap Map<String, Object> headerMap*/
    );
}
